import java.util.Arrays;
import java.util.Scanner;

/*
1. 编程实现以下需求：

        定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。

        再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
*/
public class Question1 {

    //打印行矩阵
    public static void printMatrix(int[][] matrix) {
        for (int[] ints : matrix) {
            for(int ele : ints) {
                System.out.printf("%3d", ele);
            }
            System.out.println();
        }
    }
    //静态成员方法 输入元素值 创建元素矩阵 打印行元素累加和
    public static void rowSum(int value) {
        int[][] matrix = create_matrix(value);
        for(int i = 0; i<matrix.length; ++i) {
            for(int j = 1; j<matrix[0].length; ++j) {
                matrix[i][j] += matrix[i][j-1];
            }
        }

        System.out.println("行累加和矩阵为：");
        printMatrix(matrix);
        System.out.print("每行之和为");
        int[] rSum = new int[16];
        for(int i = 0; i<matrix.length; ++i){
            rSum[i] = matrix[i][matrix[0].length-1];
        }
        System.out.println(Arrays.toString(rSum));
        System.out.println();
    }

    //静态成员方法 输入元素值 创建元素矩阵 打印列元素累加和
    public static void colSum(int value) {
        int[][] matrix = create_matrix(value);
        for(int i = 1; i<matrix.length; ++i) {
            for(int j = 0; j<matrix[0].length; ++j) {
                matrix[i][j] += matrix[i-1][j];
            }
        }

        System.out.println("列累加和矩阵为：");
        printMatrix(matrix);
        System.out.print("每列之和为");
        System.out.println(Arrays.toString(matrix[matrix.length-1]));
        System.out.println();
    }
    //静态成员方法 输入元素值 创建元素矩阵 打印左上到右下元素累加和
    public static void pDiagSum(int value) {
        int[][] matrix = create_matrix(value);
        for(int i = 1; i<matrix.length; ++i) {
            for(int j = 1; j<matrix[0].length; ++j) {
                matrix[i][j] += matrix[i-1][j-1];
            }
        }
        System.out.println("左上到右下元素累加和矩阵为：");
        printMatrix(matrix);
        System.out.print("末行和末列的对角线累加和均为：");
        System.out.println(Arrays.toString(matrix[matrix.length-1]));
        System.out.println();

    }    //静态成员方法 输入元素值 创建元素矩阵 打印右上到左下元素累加和
    public static void mDiagSum(int value) {
        int[][] matrix = create_matrix(value);
        for(int i = 1; i<matrix.length; ++i) {
            for(int j = 0; j<matrix[0].length-1; ++j) {
                matrix[i][j] += matrix[i-1][j+1];
            }
        }
        System.out.println("右上到左下元素累加和矩阵为：");
        printMatrix(matrix);
        System.out.print("首列和末行的对角线累加和均为：");
        System.out.println(Arrays.toString(matrix[matrix.length-1]));
        System.out.println();
    }


    public static int[][] create_matrix(int value) {
        int[][] matrix = new int[16][16];
        for(int i = 0; i<matrix.length; ++i) {
            for(int j = 0; j<matrix[0].length; ++j) {
                matrix[i][j] = value;
            }
        }
        return matrix;
    }

}
